package one.stand.service.impl;

import one.stand.mapper.CompanySelectAgreeMapperExt;
import one.stand.mapper.CompanySelectMapperExt;
import one.stand.model.CompanySelect;
import one.stand.model.CompanySelectAgree;
import one.stand.service.CompanySelectService;
import one.stand.util.WarnUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class CompanySelectServiceImpl implements CompanySelectService {
    @Autowired
    private CompanySelectMapperExt companySelectMapperExt;
    @Autowired
    private CompanySelectAgreeMapperExt companySelectAgreeMapperExt;

    @Override
    @Transactional
    public void apply(Integer companyId, Integer selectCompanyId) {
        CompanySelect companySelect = companySelectMapperExt.selectByCompany(companyId, STATUS_APPLY);
        WarnUtil.isNull(companySelect, "已申请优选，不能再申请了");
        companySelect = companySelectMapperExt.selectByCompany(companyId, STATUS_AGREE);
        WarnUtil.isNull(companySelect, "已授权优选，不能再申请了");

        companySelect = new CompanySelect();
        companySelect.setCompanyId(companyId);
        companySelect.setSelectCompanyId(selectCompanyId);
        companySelect.setStatus(STATUS_APPLY);
        companySelectMapperExt.insertSelective(companySelect);
    }

    @Override
    @Transactional
    public void agree(Integer id) {
        CompanySelect companySelect = companySelectMapperExt.selectByPrimaryKey(id);

        CompanySelectAgree selectAgree = new CompanySelectAgree();
        selectAgree.setCompanyId(companySelect.getCompanyId());
        selectAgree.setSelectCompanyId(companySelect.getSelectCompanyId());

        companySelect = companySelectMapperExt.selectByCompany(companySelect.getCompanyId(), STATUS_AGREE);
        WarnUtil.isNull(companySelect, "已授权优选，不能再审核通过了");

        companySelect = new CompanySelect();
        companySelect.setId(id);
        companySelect.setStatus(STATUS_AGREE);
        companySelectMapperExt.updateByPrimaryKeySelective(companySelect);

        companySelectAgreeMapperExt.insertSelective(selectAgree);
    }

    @Override
    @Transactional
    public void refuse(Integer id) {
        CompanySelect companySelect = new CompanySelect();
        companySelect.setId(id);
        companySelect.setStatus(STATUS_REFUSE);
        companySelectMapperExt.updateByPrimaryKeySelective(companySelect);

        companySelect = companySelectMapperExt.selectByPrimaryKey(id);
        CompanySelectAgree selectAgree = companySelectAgreeMapperExt.select(companySelect.getCompanyId(), companySelect.getSelectCompanyId());
        companySelectAgreeMapperExt.deleteByPrimaryKey(selectAgree.getId());
    }

    @Override
    @Transactional
    public void close(Integer id) {
        CompanySelect companySelect = new CompanySelect();
        companySelect.setId(id);
        companySelect.setStatus(STATUS_CLOSE);
        companySelectMapperExt.updateByPrimaryKeySelective(companySelect);

        companySelect = companySelectMapperExt.selectByPrimaryKey(id);
        CompanySelectAgree selectAgree = companySelectAgreeMapperExt.select(companySelect.getCompanyId(), companySelect.getSelectCompanyId());
        companySelectAgreeMapperExt.deleteByPrimaryKey(selectAgree.getId());
    }

    @Override
    public CompanySelect get(Integer id) {
        return companySelectMapperExt.selectByPrimaryKey(id);
    }

    @Override
    public CompanySelect get(Integer companyId, Integer selectCompanyId) {
        return companySelectMapperExt.selectCompanySelect(companyId, selectCompanyId);
    }

    @Override
    public boolean isSelect(Integer companyId) {
        return companySelectAgreeMapperExt.selectCount(companyId) > 0;
    }

    @Override
    public CompanySelectAgree getByCompanyId(Integer companyId) {
        return companySelectAgreeMapperExt.selectOne(companyId);
    }
}
